package com.itany.lambda;


import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @Author:石小俊
 * @Date:2022/11/17 11:29
 * @Version:1.0-SNAPSHOT
 * @Description:
 */
public class Test03 {

    public static void main(String[] args) {
        // 方法引用的三种方式
        Consumer<String> consumer = s -> System.out.println(s);
        // 调用方法后才会执行对应的方法
        consumer.accept("Hello Consumer");


        // 方式一 对象::实例方法名
        User user = new User();
        // user.setUsername("admin");
        // Consumer<String> c1 = s -> user.setUsername(s);
        Consumer<String> c1 = user::setUsername;
        c1.accept("admin");
        Consumer<String> c2 = user::setPassword;
        c2.accept("123456");
//        System.out.println(user.getUsername()+"--"+user.getPassword());
        Consumer out = System.out::println;
        out.accept(user.getUsername()+"--"+user.getPassword());

        Supplier<String> s = user::getUsername;
        out.accept(s.get());
        Supplier<String> s2 = user::getPassword;
        out.accept(s2.get());

        // 方式二 类::静态方法
        Supplier<String> hello = User::sayHello;
        out.accept(hello.get());

        // 方式三 类::实例方法
        Predicate<String> p = "abc"::equals;
        System.out.println(p.test("abc"));

        // 两个参数的断言函数
        BiPredicate<String,String> bp = String::equals;
        // 第一个参数的泛型表示调用方法的对象的类型
        // 第二个参数的泛型表示方法的参数类型
        System.out.println(bp.test("abc",null));

    }

}
